A data processing apparatus may include one or more processing cores. The processor cores, or programs executed thereon, are arranged to process data in accordance with virtual memory addresses. For example, each of the processor cores may process data in accordance with virtual memory addresses in a respective virtual memory address space, for example under the control of an operating system or a so-called hypervisor which allocates virtual memory address spaces to the processes being performed by the different processor cores, partly as a technique for avoiding a process associated with one processor core accidently or maliciously accessing data appropriate to a process being executed by another of the processor cores.
When an access is required to a virtual memory address, it is first necessary to translate the virtual memory address to a physical memory address so that the required information can be obtained from or written to the physical memory or a physical memory cache. A cache known as a translation lookaside buffer (TLB) may be used as part of the address translation process. The TLB stores recently or commonly used translations between virtual and physical memory addresses, on a fixed size page-by-page basis. So, as a first step in an address translation process, a TLB may be consulted to detect whether the TLB already contains the required address translation. If not, then a more involved translation process may be used, for example involving consulting so-called page tables holding address translation information, typically resulting in the TLB being populated with the required translation. A disadvantage of this approach is that the operating system is utilized to copy data from one virtual memory address space to another, which slows down operation. A further disadvantage is that data resources, such as memory and storage, are not used efficiently. For example, two physical copies of the data may be stored—even if the data is not modified. In this case, additional resources are needed to actually copy the data.
One approach to improve efficiency is a ‘copy-on-write’ mechanism. In this approach, the physical copying of data is deferred until the data is written or modified. Until then, data is shared. However, this approach is still not efficient, since the mechanism is performed by the operating system.